package br.com.getdiscount.tcc.model.preco;

import java.util.List;

import br.com.getdiscount.base.dao.GenericDAOImpl;

public class HbnPrecoDAO extends GenericDAOImpl<Preco> implements PrecoDAO {
	
	@Override
	public List<Preco> findAllPrecoHistorico(Preco preco) {
		String hql = " Select pr ";
		hql += " FROM Preco pr ";
		
		hql += " JOIN pr.tempo t  ";
		hql += " JOIN pr.origem o  ";
		hql += " JOIN pr.produto p  ";
		
		hql += " WHERE 1=1 ";
		
		if ( preco.getTempo().getDia() != null && preco.getTempo().getDia() > 0) {
			hql += " AND t.dia = " + preco.getTempo().getDia();
		}
		if ( preco.getTempo().getDiaSemana() != null && preco.getTempo().getDiaSemana().length() > 0) {
			hql += " AND t.diaSemana = '" + preco.getTempo().getDiaSemana() + "'";		
		}
		if ( preco.getTempo().getMes()!= null &&  preco.getTempo().getMes().length() > 0 ) {
			hql += " AND t.mes = '" + preco.getTempo().getMes() + "'"; 
		}
		if ( preco.getTempo().getAno() != null &&  preco.getTempo().getAno() > 0) {
			hql += " AND t.ano = " + preco.getTempo().getAno();
		}
		
		
		if ( preco.getOrigem().getDsOrigem() != null && preco.getOrigem().getDsOrigem().length() > 0) {
			hql += " AND upper(o.dsOrigem) like '%" + preco.getOrigem().getDsOrigem().toUpperCase() + "%'";		
		}
		if ( preco.getProduto().getDsMarca() != null && preco.getProduto().getDsMarca().length() > 0) {
			hql += " AND upper(p.dsMarca) like '%" + preco.getProduto().getDsMarca().toUpperCase() + "%'";		
		}		
		if ( preco.getProduto().getDsProduto() != null && preco.getProduto().getDsProduto().length() > 0) {
			hql += " AND upper(p.dsProduto) like '%" + preco.getProduto().getDsProduto().toUpperCase() + "%'";		
		}	
		if ( preco.getVlPreco() != null && preco.getVlPreco() > 0) {
			hql += " AND pr.vlPreco = " + preco.getVlPreco();
		}
		
		if ( preco.getAtributoOrdenacao() != null && preco.getAtributoOrdenacao().length() > 0 ) {
			hql += " ORDER BY " + preco.getAtributoOrdenacao();
			if ( preco.getTipoOrdenacao() != null && preco.getTipoOrdenacao().length() > 0 ) {
				hql += " " +preco.getTipoOrdenacao();
			}
		}
		
		
		//dtInicial
		//dtFinal
		
		try {
			return  (List<Preco>) getHibernateTemplate().find(hql);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
}
